package com.qing.qingcodegenerate.core.handler;

import com.qing.qingcodegenerate.model.entity.User;
import com.qing.qingcodegenerate.model.enums.MessageTypeEnum;
import com.qing.qingcodegenerate.service.ChatHistoryService;
import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Flux;

/**
 * 简单文本流处理器
 * 处理 HTML 和 MULTI_FILE 类型的流式响应
 */
@Slf4j
public class SimpleTextStreamHandler {

    /**
     * 处理传统流（HTML, MULTI_FILE）
     * 直接收集完整的文本响应
     *
     * @param contentFlux         原始流
     * @param chatHistoryService 聊天历史服务
     * @param appId              应用ID
     * @param loginUser          登录用户
     * @return 处理后的流
     */
    public Flux<String> handle(Flux<String> contentFlux,
                               ChatHistoryService chatHistoryService,
                               long appId, User loginUser) {
        //  收集完整的 AI 回复到聊天历史
        StringBuilder aiMessageBuilder = new StringBuilder();
        return contentFlux.map(chunk -> {
                    // 收集 AI 回复
                    aiMessageBuilder.append(chunk);
                    return chunk;
                }).doOnComplete(() -> {
                    // AI 生成成功，保存 AI 回复
                    String aiResponse = aiMessageBuilder.toString();
                    chatHistoryService.addChatHistory(appId, aiResponse, MessageTypeEnum.AI.getValue(), loginUser.getId());
                })
                .doOnError(error -> {
                    // AI 生成失败，保存错误信息
                    String errorMessage = "AI回复失败: " + error.getMessage();
                    chatHistoryService.addChatHistory(appId, errorMessage,MessageTypeEnum.ERROR.getValue(), loginUser.getId());
                });
    }
}

